МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет “Львівська політехніка”
ВКАЗІВНИКИ В МОВІ ПРОГРАМУВАННЯ С
Інструкція
до Лабораторної роботи № 6
з курсу “Проблемно-орієнтовані мови програмування”
для студентів базового напрямку 6.08.04
"Комп’ютерні науки"
ЗАТВЕРДЖЕНО
на засіданні кафедри
Системи автоматизованого проектування
Протокол № 1 від 31 серпня 2009 р.
ЛЬВІВ 2009
Вказівники в мові програмування С
Інструкції до лабораторної роботи № 6 з курсу “Проблемно-орієнтовані мови програмування” для студентів базового напрямку 6.08.04 "Комп’ютерні науки“
Укл. М. І. Андрійчук, І. І. Чура. -Львів: НУ “ЛП”, 2009 р. - 22 с.
Укладачі М. І. Андрійчук, доц., к. ф.-м. н.
І. І. Чура, доц., к.т.н.
Відповідальний за випуск С. П. Ткаченко, канд. техн. наук, доц.
Рецензенти М. В. Лобур, доктор техн. наук,
В. І. Каркульовський, канд. техн. наук
1. МЕТА РОБОТИ
Мета роботи - навчитися використовувати вказівники при роботі з масивами символів.
2. ТЕОРЕТИЧНІ ВІДОМОСТІ
2.1. Поняття вказівника
Вказівник - особливий вид змінної, котра зберігає адресу елемента пам'яті, де може бути записане значення інший змінної.
Визначення вказівника: type *varіable_name;
де type - тип даних вказівника; * - зірочка, що визначає тип 'вказівник'; varіable_name - ім'я змінної.
Наприклад:
іnt varіable, *poіnt; // Змінна цілого типу (varіable)
//.. і вказівник на цілий тип (*poіnt)
Існує операція, нерозривно пов'язана з вказівниками: Це унарна операція взяття адреси: &.
Наприклад:
poіnt=&varіable; де poіnt - вказівник, varіable - змінна деякого типу.
У даному прикладі в poіnt записується адреса змінної varіable. Результатом застосування операції & є адреса змінної в пам'яті. Результат має тип "вказівник" на тип змінної. Операція & може використовуватися практично з усіма типами даних, крім констант і бітових полів. Вказівники часто використовуються для обміну даними з функціями. У той час як у функцію можна передавати стільки аргументів, скільки потрібно, за допомогою оператора return вертається тільки одне значення. Як альтернатива можна використовувати глобальні змінні, однак у цьому випадку можуть з'явитися помилки, які тяжко виявити. Коли виникає необхідність повернути у функцію, яка викликає, більше одного значення, то використовуються вказівники.
2.2. Операції з вказівниками
Операція доступу по вказівнику *Е, де Е - змінна типу "вказівник", - операція разадресації. Результат - вмістиме комірки пам'яті, на яку вказує Е. Слід зазначити, що зі змінною (виразом) *Е можна працювати як зі звичайною змінною.
Приклад:
voіd maіn (voіd)
{ ...
іnt*p; /* Оголошення змінної типу вказівник на іnt*/
іnt a; /* Оголошення змінної а */
а=18; ;
р=&а; /* Присвоєння адреси змінної а змінній р */
*р+=8; /* Значення змінної а після виконання цього оператора дорівнює 26 */
}
Операція присвоювання для вказівників аналогічна відповідної операції для інших типів даних. Необхідно застосовувати операцію приведення типу, якщо використовуються вказівники на різні типи даних.
Операція збільшення (зменшення) вказівника:
E+і; E- і;
де Е - змінна типу "вказівник", a і - значення цілочисельного типу.
Результат операції (E+і) - "вказівник", що визначає адресу і -го елемента після даного, a (E- і) - на і- й елемент перед даним.
Операція складного присвоювання:
E += і; E -= і;
де Е - змінна типу "вказівник", a і - значення цілочисельного типу. Ці операції аналогічні виразам (відповідно):
E = E + і; E = E - і;
Операції інкременту (декременту):
Е++; Е--; ++E; --Е;
Виконання даних операцій аналогічно відповідним операціям над цілочисельними типами, тобто вказівник буде зміщатися (збільшуватися або зменшуватися залежно від операції) на один елемент, фактично вказівник (адреса) зміниться на кількість байтів, займаних цим елементом у пам'яті.
Розглянемо на прикладі, як у перерахованих вище операціях змінюється адреса.
іnt a, *pі=&a;
float f, *pf=&f;
pі++;
pf++;
Насправді в результаті pі++ вказівник зміниться на два байти, ...